/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Clases;

import GUI.Principal;
import java.awt.Component;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;

/**
 *
 * @author Ariel
 */
public class Trabajador extends Thread{
    private Thread hilo;
   private File f; 
   private Component ventana;
   private JProgressBar bp;

    public Trabajador(File f, Component ventana, JProgressBar bp) {
        this.f = f;
        this.ventana = ventana;
        this.bp = bp;
    }

   public void run() {
      System.out.println("Analizando " +  f.getName() );
      Documento doc = new Documento(f.getName(), f.getPath());
        HashMap<String, Vocabulario> mapa = new HashMap<>();
        Pattern patron = Pattern.compile("[([^']&&^\\W)\\d_]");
        try (Scanner sc = new Scanner(f,"latin1")) {
            sc.useDelimiter(patron);
            String palabra;
            while (sc.hasNext()) {
                palabra = sc.next();
                Vocabulario vo;
                if (palabra.length() != 0) {
                    if(mapa.get(palabra)!=null){
                        vo = mapa.get(palabra);
                        vo.setFrecuencia(vo.getFrecuencia()+1);
                    }
                    else vo = new Vocabulario(palabra, doc);
                    
                    mapa.put(palabra.toLowerCase(), vo);
                }
            }
            
            sc.close();
            
            DAO d = new DAO();
            int i=0;
            int doc_id=d.InsertarDoc(doc.getNombre(), doc.getDir());
            for(String aKey : mapa.keySet()) {
                Vocabulario voc = mapa.get(aKey);
                d.InsertarPalabra(aKey, voc.getFrecuencia(), doc_id);
                //System.out.println("" + aKey + ": " + voc.getFrecuencia() );//+ " - Archivo: " + voc.doc.getNombre());
                i++;
                bp.setValue(i*100/mapa.size());
                bp.setString(f.getName() + ": " + bp.getValue() + "%");
            }
            //System.out.println("Cantidad de palabras: " + mapa.size());
            //System.out.println("Ariel existe: " + mapa.containsKey("ariel"));
            //eti.setText("El archivo "+ f.getName() + " fue analizado con exito!");
        } 
        catch (FileNotFoundException ex)
        {
            JOptionPane.showMessageDialog(ventana, "El archivo no existe!!!", "Error", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IOException ex)
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
     System.out.println("Trabajador " + f.getName() + " termino.");
   }
   
   public void start ()
   {
      System.out.println("Iniciando trabajador para archivo " +  f.getName() );
      if (hilo == null)
      {
         hilo = new Thread (this, f.getName());
         hilo.start();
      }
   }
   
}
